using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeostatisticalAnalystTools._WorkingwithGeostatisticalLayers
{
    /// <summary>
    /// <para>GA Layer To Grid</para>
    /// <para>Exports a Geostatistical layer to a raster.</para>
    /// <para>将地统计图层导出到栅格。</para>
    /// </summary>    
    [DisplayName("GA Layer To Grid")]
    public class GALayerToGrid : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GALayerToGrid()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_geostat_layer">
        /// <para>Input geostatistical layer</para>
        /// <para>The geostatistical layer to be analyzed.</para>
        /// <para>要分析的地统计图层。</para>
        /// </param>
        /// <param name="_out_surface_grid">
        /// <para>Output surface raster</para>
        /// <para>The raster to be created.</para>
        /// <para>要创建的栅格。</para>
        /// </param>
        public GALayerToGrid(object _in_geostat_layer, object _out_surface_grid)
        {
            this._in_geostat_layer = _in_geostat_layer;
            this._out_surface_grid = _out_surface_grid;
        }
        public override string ToolboxName => "Geostatistical Analyst Tools";

        public override string ToolName => "GA Layer To Grid";

        public override string CallName => "ga.GALayerToGrid";

        public override List<string> AcceptEnvironments => ["cellSize", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "parallelProcessingFactor", "scratchWorkspace", "snapRaster", "workspace"];

        public override object[] ParameterInfo => [_in_geostat_layer, _out_surface_grid, _cell_size, _points_per_block_horz, _points_per_block_vert];

        /// <summary>
        /// <para>Input geostatistical layer</para>
        /// <para>The geostatistical layer to be analyzed.</para>
        /// <para>要分析的地统计图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input geostatistical layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geostat_layer { get; set; }


        /// <summary>
        /// <para>Output surface raster</para>
        /// <para>The raster to be created.</para>
        /// <para>要创建的栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output surface raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_surface_grid { get; set; }


        /// <summary>
        /// <para>Output cell size</para>
        /// <para><xdoc>
        ///   <para>The cell size at which the output raster will be created.</para>
        ///   <para>This value can be explicitly set in the Environments by the Cell Size parameter.</para>
        ///   <para>If not set, it is the shorter of the width or the height of the extent of the input point features, in the input spatial reference, divided by 250.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将创建输出栅格的像元大小。</para>
        ///   <para>此值可以通过像元大小参数在“环境”中显式设置。</para>
        ///   <para>如果未设置，则为输入空间参考中输入点要素范围的宽度或高度除以 250 的较短者。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output cell size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _cell_size { get; set; } = null;


        /// <summary>
        /// <para>Number of points in the cell (horizontal)</para>
        /// <para>The number of predictions for each cell in the horizontal direction for block interpolation.</para>
        /// <para>用于块插值的水平方向上每个像元的预测数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of points in the cell (horizontal)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _points_per_block_horz { get; set; } = 1;


        /// <summary>
        /// <para>Number of points in the cell (vertical)</para>
        /// <para>The number of predictions for each cell in the vertical direction for block interpolation.</para>
        /// <para>每个像元在垂直方向上的预测数，用于块插值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of points in the cell (vertical)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _points_per_block_vert { get; set; } = 1;


        public GALayerToGrid SetEnv(object cellSize = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object scratchWorkspace = null, object snapRaster = null, object workspace = null)
        {
            base.SetEnv(cellSize: cellSize, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, workspace: workspace);
            return this;
        }

    }

}